/**
  ******************************************************************************
  * @author Chris
  * @since 2023/9/23 17:09
  *
  * @file     led.c
  * @brief    The project will ...
  *
  * @note     ...
  *
  * @warning  Do not to ...
  ******************************************************************************
  * Change Logs:
  *   Date           Author       Notes
  *   2023/9/23     Chris        the first version
  *
  ******************************************************************************
  */

/** region declare function region */

/** region declare function region */


/** region public function region */


#include "air001xx_ll_bus.h"
#include "air001xx_ll_gpio.h"

/**
  * @brief  GPIO配置函数
  * @param  无
  * @retval 无
  */
static void APP_GpioConfig(void) {
    /* 使能时钟 */
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);

    /* 将PA11引脚配置为输出 */
    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_1, LL_GPIO_MODE_OUTPUT);
    /* 默认（复位后）为推挽输出 */
    /* LL_GPIO_SetPinOutputType(GPIOA, LL_GPIO_PIN_11, LL_GPIO_OUTPUT_PUSHPULL); */
    /* 将PA1输出速度配置为非常高 */
    LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_1, LL_GPIO_SPEED_FREQ_VERY_HIGH);
    /* 默认（复位后）为无上拉 */
    /* LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_11, LL_GPIO_PULL_NO);*/
}


/**
 * @brief   LED（Light Emitting Diode，发光二极管）初始化
 *
 * @note    GPIO 配置为上拉输出模式即可。可配置的 LED 有：
 *          左：D2 - PB1
 *          中：D3 - PB0
 *          右：D4 - PB3
 * @param   无
 * @retval  无
 */
void HD_LED_Init(void) {
    // PA、PB、PF 均分布在 IOPORT 总线上
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);

    LL_GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.Pin = LL_GPIO_PIN_1 | LL_GPIO_PIN_0 | LL_GPIO_PIN_3;
    GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
    GPIO_InitStruct.Alternate = LL_GPIO_AF_0;

    LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

void HD_LED_On(uint32_t Pin) {
    LL_GPIO_ResetOutputPin(GPIOB, Pin);
}

void HD_LED_Off(uint32_t Pin) {
    LL_GPIO_SetOutputPin(GPIOB, Pin);
}

void HD_LED_Turn(uint32_t Pin) {
    GPIOB->ODR ^= Pin;
}

/** region public function region */


/** region private function region */

/** region private function region */